package Singleton;

import org.omg.CORBA.PRIVATE_MEMBER;

/**
 * @Author: 蔡翔
 * @Date: 2019/12/5 15:52
 * @Version 1.0
 *
 * ThreadLocal 这种单例模式 不能保证全局唯一 ，但是能够保证线程唯一 。
 */
public class ThreadLocalInstance {
    private static final ThreadLocal<ThreadLocalInstance> threadLocalInstance = new ThreadLocal<ThreadLocalInstance>(){
        //重写 初始化方法。
        @Override
        protected ThreadLocalInstance initialValue() {
            return new ThreadLocalInstance();
        }
    };

    private ThreadLocalInstance(){

    }

    public static ThreadLocalInstance getInstance(){
        return threadLocalInstance.get();
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(new T());
        Thread t2 = new Thread(new T());
        t1.start();
        t2.start();
        System.out.println("program end");

        /**
         * 结果：
         * program end
         * Thread-0 Singleton.ThreadLocalInstance@2f75cfb0
         * Thread-1 Singleton.ThreadLocalInstance@31ba7625
         *
         * 虽然每个线程中的 实例都是不同的，但是 每个线程他们对应的线程都是相同的。
         **/
    }
}